package com.example.File;

import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;

public class Test3File {
    public static void main(String[] args) throws IOException {
        //method1();
        //method2();

        //统计一个文件夹中,每种文件出现的次数
        //统计---定义一个变量用来统计
        //利用map集合进行数据统计，键 --- 文件后缀名   值 ---- 次数
        File file = new File("Java_project");
        HashMap<String, Integer> hm = new HashMap<>();
        getCount(hm, file);
        System.out.println(hm); //{java=78, iml=1}

    }

    private static void getCount(HashMap<String, Integer> hm, File file) {
        File[] files = file.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                String fileName = f.getName();
                String[] fileNameArr = fileName.split("\\.");
                if (fileNameArr.length == 2) {
                    String fileEndName = fileNameArr[1];
                    if (hm.containsKey(fileEndName)) {
                        //已经存在
                        //将已经出现的次数获取出来
                        Integer count = hm.get(fileEndName);
                        //这种文件又出现了一次
                        count++;
                        //把已经出现的次数给覆盖掉
                        hm.put(fileEndName, count);
                    } else {
                        //不存在
                        //表示当前文件是第一次出现
                        hm.put(fileEndName, 1);
                    }
                }
            } else {
                getCount(hm, f);
            }
        }
    }

    private static void method2() {
        //练习二:删除一个多级文件爽
        //delete方法
        //只能删除文件和空文件夹
        //如果现在要删除一个有内容的文件来?
        //先删掉这个文件夹里面所有的内容.
        //最后再删除这个文件夹
        File file = new File("C:\\aaa");
        deleteDir(file);
    }

    private static void deleteDir(File file) {
        //先删掉这个文件夹里面所有的内容
        //递归 方法在方法体中自己调用自己
        //注意:可以解决所有文件夹和递归相结合的题目
        //1.进入---得到文件夹里面所有内容的File对象.
        File[] files = file.listFiles();
        //2.遍历---因为我想得到文件夹里面每一个文件和文件夹的File对象
        for (File f : files) {
            //3.判断---如果遍历到的File对象是一个文件,那么直接删除
            if (f.isFile()) {
                f.delete();
            } else {
                //4.判断
                //递归
                deleteDir(f);//参数一定要是文件夹里面的文件夹File对象
            }
        }
        //最后再删除这个文件夹
        file.delete();
    }

    private static void method1() throws IOException {
        //注意点:文件所在的文件夹必须要存在.
//        File file = new File("Java_Project\\aaa\\a.txt");
//        boolean newFile = file.createNewFile();
//        System.out.println(newFile);


        File file = new File("Java_Project\\aaa");
        if (!file.exists()) {
            //如果文件夹不存在,就创建出来
            file.mkdirs();
        }
        File file1 = new File(file, "a.txt");
        file1.createNewFile();
    }
}
